﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;

namespace Aga.Informatizacion.Documentos.HOPE
{
    public class Session
    {
        public string CarpetaOrigen
        {
            get;
            private set;
        }

        public IList<Archivo> Archivos
        {
            get;
            private set;
        }

        public IList<Documento> Documentos
        {
            get;
            private set;
        }

        public Documento DocumentoActual
        {
            get;
            set;
        }

        public Session(string carpetaOrigen)
        {
            CarpetaOrigen = carpetaOrigen;
            Archivos = new List<Archivo>();
            Documentos = new List<Documento>();
            DocumentoActual = new Documento();
        }

        public void AgregarArchivo(Archivo archivo)
        {
            // antes de agregar un archivo, chequeo que no este ya agregado
            if (!Archivos.Any(arc => arc.NombreOriginal.Equals(archivo.NombreOriginal)))
                Archivos.Add(archivo);
        }

        public void AgregarDocumento(Documento documento)
        {
            // antes de agregar un nuevo documento, chequeo que no este ya agregado
            if (!Documentos.Any(doc =>
                    doc.ClienteId.Equals(documento.ClienteId) &&
                    doc.NumeroDesde.Equals(documento.NumeroDesde) &&
                    doc.DocumentoTipoId.Equals(documento.DocumentoTipoId) &&
                    doc.Caja.Equals(documento.Caja)))
                Documentos.Add(documento);
        }

        public void AsociarArchivoConDocumento(Archivo archivo, Documento documento)
        {
            documento.AsociarArchivo(archivo);
        }

        internal void LoadArchivos()
        {
            // obtengo la lista de imagenes de la carpeta
            string searchPattern = "*.jpg";
            string[] directory = Directory.GetFiles(CarpetaOrigen, searchPattern, SearchOption.TopDirectoryOnly);

            // agrego las imagenes a la lista de imagenes y al
            // lst de imagenes
            foreach (var item in directory)
            {
                // agrego las imagenes al imageList para el select
                this.AgregarArchivo(new Archivo(Path.GetFileName(item)));
            }
        }

        internal Archivo GetArchivo(string nombreArchivo)
        {
            return Archivos.Where(arc => arc.NombreOriginal.Equals(nombreArchivo)).SingleOrDefault();
        }

        internal Documento GetDocumento(int clienteId, int documentoTipoId, string numeroDesde, int caja)
        {
            return Documentos.Where(
                doc =>
                    doc.ClienteId.Equals(clienteId) &&
                    doc.NumeroDesde.Equals(numeroDesde) &&
                    doc.DocumentoTipoId.Equals(documentoTipoId) &&
                    doc.Caja.Equals(caja)
                ).SingleOrDefault();
        }
    }
}
